Move ImageHandler registration into image.py from XendDomainInfo.py. Move
authoremellor@ewan <emellor@ewan>
Sat, 24 Sep 2005 19:36:15 +0000 (20:36 +0100)
committeremellor@ewan <emellor@ewan>
Sat, 24 Sep 2005 19:36:15 +0000 (20:36 +0100)
ImageHandler.create and findImageHandlerClass to the module level, and inline
addImageHandlerClass.  Move ImageHandler.kernel, ramdisk, cmdline, and flags,
which seem inadvertently to have been declared as class variables, and make
them instance variables instead.

Signed-off-by: Ewan Mellor <ewan@xensource.com>
tools/python/xen/xend/XendDomainInfo.py
tools/python/xen/xend/image.py

index 384a8275c3e6cb31c0e5c2ac0c77e2cefdf8e72c..baf4bd6b522ac1ab7488fb650e970969ded20fcd 100644 (file)
@@ -34,6 +34,7 @@ from xen.util.blkif import blkdev_uname_to_file
 
 from xen.xend.server.channel import EventChannel
 
+from xen.xend import image
 from xen.xend import sxp
 from xen.xend.XendBootloader import bootloader
 from xen.xend.XendLogging import log
@@ -734,9 +735,9 @@ class XendDomainInfo:
         if 'image' not in self.info:
             raise VmError('Missing image in configuration')
 
-        self.image = ImageHandler.create(self,
-                                         self.info['image'],
-                                         self.info['device'])
+        self.image = image.create(self,
+                                  self.info['image'],
+                                  self.info['device'])
 
         if self.domid <= 0:
             raise VmError('Creating domain failed: name=%s' %
@@ -1085,19 +1086,6 @@ class XendDomainInfo:
         return name in self.info and self.info[name] is not None
 
 
-#============================================================================
-# Register image handlers.
-
-from image import          \
-     addImageHandlerClass, \
-     ImageHandler,         \
-     LinuxImageHandler,    \
-     VmxImageHandler
-
-addImageHandlerClass(LinuxImageHandler)
-addImageHandlerClass(VmxImageHandler)
-
-
 #============================================================================
 # Register device controllers and their device config types.
 
index 35c4700fd55956863a0645b8abdf9a9b7260cb30..8f0c1c6a7be5f4f48ac3e194b514d818925267fa 100644 (file)
@@ -33,6 +33,15 @@ xc = xen.lowlevel.xc.new()
 
 MAX_GUEST_CMDLINE = 1024
 
+
+def create(vm, imageConfig, deviceConfig):
+    """Create an image handler for a vm.
+
+    @return ImageHandler instance
+    """
+    return findImageHandlerClass(imageConfig)(vm, imageConfig, deviceConfig)
+
+
 class ImageHandler:
     """Abstract base class for image handlers.
 
@@ -48,64 +57,19 @@ class ImageHandler:
 
     The method destroy() is called when the domain is destroyed.
     The default is to do nothing.
-    
-    """
-
-    #======================================================================
-    # Class vars and methods.
-
-    """Table of image handler classes for virtual machine images.
-    Indexed by image type.
     """
-    imageHandlerClasses = {}
-
-    def addImageHandlerClass(cls, h):
-        """Add a handler class for an image type
-        @param h:        handler: ImageHandler subclass
-        """
-        cls.imageHandlerClasses[h.ostype] = h
-
-    addImageHandlerClass = classmethod(addImageHandlerClass)
-
-    def findImageHandlerClass(cls, image):
-        """Find the image handler class for an image config.
-
-        @param image config
-        @return ImageHandler subclass or None
-        """
-        ty = sxp.name(image)
-        if ty is None:
-            raise VmError('missing image type')
-        imageClass = cls.imageHandlerClasses.get(ty)
-        if imageClass is None:
-            raise VmError('unknown image type: ' + ty)
-        return imageClass
-
-    findImageHandlerClass = classmethod(findImageHandlerClass)
-
-    def create(cls, vm, imageConfig, deviceConfig):
-        """Create an image handler for a vm.
-
-        @return ImageHandler instance
-        """
-        imageClass = cls.findImageHandlerClass(imageConfig)
-        return imageClass(vm, imageConfig, deviceConfig)
-
-    create = classmethod(create)
-
-    #======================================================================
-    # Instance vars and methods.
 
     ostype = None
 
-    kernel = None
-    ramdisk = None
-    cmdline = None
-
-    flags = 0
 
     def __init__(self, vm, imageConfig, deviceConfig):
         self.vm = vm
+
+        self.kernel = None
+        self.ramdisk = None
+        self.cmdline = None
+        self.flags = 0
+
         self.configure(imageConfig, deviceConfig)
 
     def configure(self, imageConfig, _):
@@ -197,7 +161,6 @@ class ImageHandler:
         if d.has_key('console_mfn'):
             self.vm.setConsoleRef(d.get('console_mfn'))
 
-addImageHandlerClass = ImageHandler.addImageHandlerClass
 
 class LinuxImageHandler(ImageHandler):
 
@@ -425,3 +388,28 @@ class VmxImageHandler(ImageHandler):
             return 16 * 1024
         else:
             return (1 + ((mem_mb + 3) >> 2)) * 4
+
+
+"""Table of image handler classes for virtual machine images.  Indexed by
+image type.
+"""
+imageHandlerClasses = {}
+
+
+for h in LinuxImageHandler, VmxImageHandler:
+    imageHandlerClasses[h.ostype] = h
+
+
+def findImageHandlerClass(image):
+    """Find the image handler class for an image config.
+
+    @param image config
+    @return ImageHandler subclass or None
+    """
+    ty = sxp.name(image)
+    if ty is None:
+        raise VmError('missing image type')
+    imageClass = imageHandlerClasses.get(ty)
+    if imageClass is None:
+        raise VmError('unknown image type: ' + ty)
+    return imageClass